﻿package payments;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.TextField;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;

import java.math.BigDecimal;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//import org.hsqldb.jdbc.jdbcPreparedStatement;


public class PaymentsPanel extends Frame  implements ActionListener, TextListener, ItemListener
 {
  	private static final long serialVersionUID = 1L;

	//****************************************************************************************************
	//Переменные
	//****************************************************************************************************
	
	//interface Const {}
	  	
  	//Элементы интерфейса
	static java.awt.Label label_id, label_r, label_t;
	static TextField input_d, input_n, input_s;						//текстов. поля
  	static Choice choice_m,choice_k;								//выпадающие списки

  	//меню
  	//static Menu fm, sm, bdm, hlpm;			/** File, Options, Help */
  	//static Menu spSubm;					/** Options Sub-Menu */
  	//static MenuItem exitItem;			/** The MenuItem for exiting. */
  	//static CheckboxMenuItem cb, cb1;	/** An option that can be on or off. */
  	
  	//кнопки
  	static Button button_w, firstr, lastr, prevr, nextr, newr, updat, downdat, nowdat, totalrfr;							//кнопки		
  	static String bname;											//label кнопки button_w
  	
	//цвет кнопки
  	static Color bcolor;
  	
  	//далоговое окно
  	static YesNoDialog ynd;
  	//static YesNoDialog yd;
  	
  	//Переменные для input_d, input_n, input_s
  	//static String s, d, n;							
  	  	
  	//кол-во чисел после запятой для подсчета итоговой суммы
  	//static BigDecimal summ = new BigDecimal(0).setScale(2);
  	
  	//для даты
  	final static SimpleDateFormat dateformatDDMMYYYY = new SimpleDateFormat("dd.MM.yyyy");   		//формат даты 01.01.2011
  	final static Date dateNow = new Date();	;//текущая дата 
  	final static StringBuilder nowDDMMYYYY = new StringBuilder(dateformatDDMMYYYY.format(dateNow));

  	//диалоговое окно при загрузке списка клиентов из файла
  	//static UseFileDialog ufd = new UseFileDialog();										 
   	
  	//файл настроек
  	static INIFile prop;
  	//менеджер по умолчанию
  	static String MANAGER;	
  	static String MANAGER2;	//менеджер в транслите
  	//основные директории
	static String PROGRAM_DIR;
	static String BASE_DIR;
	static String UPLOAD_DIR;
	static String DOWNLOAD_DIR;
	
	static String FTP_URL;
	static String FTP_BANK_UPLOAD_DIR;
	static String FTP_USER;
	
	//jdbc класс и url
  	static String CLASS_JDBC;
  	static String URL;
  		
  	//ДЛЯ БД
  	static Connection conn;
  	
  //Для файла csv
  	//static File fileCsv;
	//static CsvReader csvR;
	//static CsvWriter csvW;
  	
	//списки без повторяющихся значений
	//static Set klients = new HashSet();
	//static Set managers = new HashSet();
			
//***************************************************************************************  
	public PaymentsPanel() 
	{
		super("Реестр Платежей");
        setSize(330, 310);
		
        //********************************************************************************
        //файл настроек
        try {
        	prop = new INIFile(".\\options\\properties.ini");
        	
        	//Менеджер по умолчанию из файла
            MANAGER = prop.getProperty("conf","manager","" );
            MANAGER2 = prop.getProperty("conf","manager2","" );
           
            //и основные директории
            PROGRAM_DIR = prop.getProperty("path","programdir","" );
            BASE_DIR = prop.getProperty("path","basedir","" );
            UPLOAD_DIR = prop.getProperty("path","uploaddir","" );
            DOWNLOAD_DIR = prop.getProperty("path","downloaddir","" );

            //ftp
            FTP_URL = prop.getProperty("ftp","addr","");
            FTP_BANK_UPLOAD_DIR = prop.getProperty("ftp","path","");
        	FTP_USER = prop.getProperty("ftp","user","");
        	       
            //jdbc класс и url
            CLASS_JDBC = prop.getProperty("connect","classjdbc","" );
            URL = prop.getProperty("connect","urljdbc","" );
            
            //Класс jdbc
            try {
    			Class.forName(CLASS_JDBC);
    		}
            	catch (ClassNotFoundException e3) {e3.printStackTrace();}
              
            //открыть соединение с базой, закрывается при выходе
            conn = null;
    		try{conn = DriverManager.getConnection(URL, "sa", "");} 
    			catch (SQLException e2) {e2.printStackTrace();}
    		
    		 try {conn.setAutoCommit(true);}
         	catch (SQLException e1) {e1.printStackTrace();}
            
             
            //создадим директории для работы программы
            if (!new File(PROGRAM_DIR.toString()).exists()){
        		new File(PROGRAM_DIR.toString()).mkdir();
        	}
            
            if (!new File(UPLOAD_DIR.toString()).exists()){
        		new File(UPLOAD_DIR.toString()).mkdir();
        	}
            
            if (!new File(DOWNLOAD_DIR.toString()).exists()){
        		new File(DOWNLOAD_DIR.toString()).mkdir();
        	}
            
            if (!new File(BASE_DIR.toString()).exists()){
            	new File(BASE_DIR.toString()).mkdir();
            	
            	ReCreateBase();
            }
        	
		} 
        	catch (IOException e3) {e3.printStackTrace();}
    
        
        
      
//***************************************************************************************  
      //***************************************************************************************  
        //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
        // события окна    
        //*******************************************************************************
        addWindowListener( new WindowAdapter(){
        	public void windowClosing(WindowEvent e){
        		try {
        			conn.close();
				} 
        			catch (SQLException e1) {
					
					e1.printStackTrace();
				}
        		System.exit(0);}
        });
        
		//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
		//Обработка изменений фокуса полей 
        //***************************************************************************************
        
		FocusListener FocusL = new FocusListener() {

		
			public void focusGained(FocusEvent arg0) {}

			
			public void focusLost(FocusEvent arg0) {
				
				//Поле Даты
				if (((Component) arg0.getSource()).equals(input_d)){
					
					//пересчитать TOTAL
					try{
						Process(true);
						CheckFields();
						RefreshTotal();
					}
					finally{
						Process(false);
					}
				}
				
				//Поле НН				
				if (((Component) arg0.getSource()).equals(input_n)){}
				
				//Поле Суммы
				if (((Component) arg0.getSource()).equals(input_s)){}
			}
		};
		
		//*******************************************************************************
		//Обработка событий изменения полей
		//*******************************************************************************
        TextListener TextL = new TextListener() 
        {
        	
        	public void textValueChanged(TextEvent arg0) 
        	{	
        		//*******************************************************************************
        		//Для проверки ввода номера накладной
        		//*******************************************************************************
        		if (((Component) arg0.getSource()).equals(input_n)){}
        		
        		//*******************************************************************************
        		//Для проверки ввода суммы
        		//*******************************************************************************
        		if (((Component) arg0.getSource()).equals(input_s)){}
        		
        		//*******************************************************************************
              	//Для проверки ввода даты
              	//*******************************************************************************
        		if (((Component) arg0.getSource()).equals(input_d)){
        			String d=input_d.getText();
        			if (d.equals(nowDDMMYYYY.toString())){
        				nowdat.setBackground(Color.LIGHT_GRAY);        				
        			}
        			else{nowdat.setBackground(Color.RED);}
        		}
        	       		
        	}
        	        	
        };
        
//***************************************************************************************  
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
        //*******************************************************************************
		//Обработка нажатий кнопок Меню
		//*******************************************************************************
        ActionListener MenuListener = new ActionListener()
        {
			
			public void actionPerformed(ActionEvent arg0)
			{
				String action = arg0.getActionCommand();
				//*******************************************************************************
       			//Для кнопки Выход
        		//*******************************************************************************
       			if (action.equals("Выход"))
       			{
       				ynd = new YesNoDialog(PaymentsPanel.this, "Выйти?");
       				ynd.setVisible(true);
       				
       				if (ynd.getResult())
       				{
       					System.out.println("Exiting.");
       					try {
							conn.close();
						} catch (SQLException e) {
							e.printStackTrace();
						}
       					PaymentsPanel.this.dispose();
       					System.exit(0);
       				}
       			} 
				
       		//*******************************************************************************
        		//Для кнопки Загрузить Клиентов
        		//*******************************************************************************
        		if (action.equals("Загрузить Клиентов")) 
        		{
        			try {
        				Process(true);
        				LoadKlients(true);
        			}
        			finally{
        				Process(false);
        			}
        		}               
       			
        		//*******************************************************************************
        		//Для кнопки Выгрузить РП
        		//*******************************************************************************
        		if (action.equals("Выгрузить РП +ftp")) 
        		{
        			if (input_d.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)) 
        			{
        				
        				CsvWriter csvW;
        				
        				//имя для файла выгрузки
        				String rpName = "rp_"
								.concat(Translit.translit(choice_m.getSelectedItem()))
								.concat("_")
								.concat(input_d.getText())
								.concat(".csv");
        				
        				File fileCsv = new File(UPLOAD_DIR, rpName);
        	
        				//проверим существование файла с таким именем
        				if(fileCsv.exists()){
        					ynd = new YesNoDialog(PaymentsPanel.this,
				        							"Файл с именем"
        											.concat(rpName)
				        							.concat(System.getProperty("line.separator"))
				        							.concat("существует!") 
				        							.concat(System.getProperty("line.separator"))
				        							.concat("Заменить?"));
							    						
        					ynd.setVisible(true);
        					
    						if (!ynd.getResult()) {
    							return;
    						}
    						else {
    							fileCsv.delete();
    						}
        				}
        				
        				Process(true);
        				        				
        				csvW = new CsvWriter(fileCsv.toString(), ';', Charset.forName("Windows-1251")); 
        				        					
        				//total в ts
        				double ts = RefreshTotal().doubleValue();
        				//счетчик строк
        				int iid = 0;
        				
        				//	Write  headers
        				try{
        					//csvW.write("id");
        					csvW.write("manager");
        					csvW.write("day");
        					csvW.write("klient");
        					csvW.write("nn");
        					csvW.write("summ");
        					csvW.write("-->>");
        					csvW.write(Double.toString(ts));
        					csvW.endRecord();
        				}
        				catch (IOException e) {
        					e.printStackTrace();
        				}
        				
        				//Connection conn = null;
        				//try{conn = DriverManager.getConnection(URL, "sa", "");} 
       					//	catch (SQLException e2) {e2.printStackTrace();}
       				
        	            //try {conn.setAutoCommit(false);}
        	            //	catch (SQLException e1) {e1.printStackTrace();}
						
        	            PreparedStatement pstmt = null;
					
							try {
								pstmt = conn.prepareStatement(
										"SELECT * FROM sample WHERE MANAGER = ? AND DAT = ? ORDER BY KlIENT, SUMA"
										);
								
								pstmt.setString(1, choice_m.getSelectedItem()); 
		    					pstmt.setString(2, input_d.getText());
								
								
							}
								catch (SQLException e1) {
									e1.printStackTrace();
								}
						
							ResultSet rs = null;
					
        				try 
        				{
        					rs = pstmt.executeQuery();
        				}
							catch (SQLException e) {e.printStackTrace();}
    	       		
        				try {
        					while (rs.next())
        					{
        						try 
        						{
        							//int id = rs.getRow();
								        							
        							try {
										//csvW.write(Integer.toString(rs.getInt("ID")));
										csvW.write(rs.getString("MANAGER"));
	        							csvW.write(rs.getString("DAT"));
	        							csvW.write(rs.getString("KLIENT"));
	        							csvW.write(rs.getString("NN"));
	        							csvW.write(rs.getBigDecimal("SUMA").toString());
	        							csvW.endRecord();
									} catch (IOException e) {
										//e.printStackTrace();
										ynd = new YesNoDialog(PaymentsPanel.this, e.getMessage(), Color.RED);
										ynd.setVisible(true);
									}
        						        							
        							iid++;
        						}
        						catch (SQLException e) {e.printStackTrace();}
		        			}
						}
        					catch (SQLException e) {e.printStackTrace();}
    	            
        				finally
        				{
        					try 
        					{
        						//close connection
        						rs.close();
        						pstmt.close();
        						//conn.close();
        						csvW.close();
        					} 
    	            			catch (SQLException e) {
    	            				Process(false);  
    	            				e.printStackTrace();
    	            			}
							
        						//System.out.println("РП выгружен");
        						ynd = new YesNoDialog(PaymentsPanel.this,"РП выгружен!"
        								.concat(System.getProperty("line.separator"))
        								.concat("Менеджер: ")
        								.concat(choice_m.getSelectedItem())
        								.concat(System.getProperty("line.separator"))
        								.concat("Дата: ")
        								.concat(input_d.getText())
        								.concat(System.getProperty("line.separator"))
        								.concat("Сумма: ")
        								.concat(Double.toString(ts))
        								.concat(System.getProperty("line.separator"))
        								.concat("Строк: ")
        								.concat(Integer.toString(iid))
        								, Color.LIGHT_GRAY);
        						ynd.setVisible(true);
        					
        						ynd = new YesNoDialog(PaymentsPanel.this,"Отправить РП на ftp?");
        						ynd.setVisible(true);
        						if (ynd.getResult())
        	       				{
        	       					//System.out.println("Идет оправка на ftp");
        	       					SimpleFtp rp2ftp = new SimpleFtp();
        	       					rp2ftp.upload("ftp://"
        	       							.concat(FTP_USER)
        	       							.concat(":")
        	       							.concat(FTP_USER)
        	       							.concat("@")
        	       							.concat(FTP_URL)
        	       							.concat(FTP_BANK_UPLOAD_DIR)
        	       							.concat(rpName),
       										UPLOAD_DIR.concat(rpName));    
        	       					
        	       					if (rp2ftp.getResult()){
        	       						ynd = new YesNoDialog(PaymentsPanel.this, "РП отправлен на ftp!", Color.LIGHT_GRAY);
										ynd.setVisible(true);
        	       					}
        	       					else{
        	       						ynd = new YesNoDialog(PaymentsPanel.this, "Error!Achtung!Ошибка!" 
        	       								.concat(System.getProperty("line.separator"))
        	       								.concat("Отправить файл не удалось!"), Color.RED);
        	       						ynd.setVisible(true);
        	       					}
        	       				}
        						
        						Process(false);        
        				}
        				
        			}
        			
        		}
        		
       			
        		//*******************************************************************************
       			//Для кнопки Список платежей
        		//*******************************************************************************
    
       			if (action.equals("Список платежей")) 
       			{
       				if (input_d.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)) 
        			{ 
       					Process(true);
       					//Connection conn = null;
       					//try{
       					//	conn = DriverManager.getConnection(URL, "sa", "");
       					//} 
       					//	catch (SQLException e2) {e2.printStackTrace();}
       				

       					//System.out.println("*Выбрать все записи по ТП и по Дате*");
    	                 					
       					
       				  //try {conn.setAutoCommit(false);}
       				  //	catch (SQLException e1) {e1.printStackTrace();}
					
       				  PreparedStatement pstmt = null;
				
						try {
							pstmt = conn.prepareStatement(
									"SELECT * FROM sample WHERE MANAGER = ? AND DAT = ? ORDER BY KlIENT, SUMA"
									);
							
							pstmt.setString(1, choice_m.getSelectedItem()); 
	    					pstmt.setString(2, input_d.getText());
							
							
						}
							catch (SQLException e1) {
								e1.printStackTrace();
							}
					
						ResultSet rs = null;
				
						try 
						{
							rs = pstmt.executeQuery();
						}
							catch (SQLException e) {e.printStackTrace();}
       					
       					 
						String str1 = "SUMA * KLIENT\n";
						try {
							while (rs.next())
							{
								//для счетчика строк
								    try {
								    	str1 = str1.concat(rs.getString("SUMA"))
								    			.concat(" * ")
								    			.concat(rs.getString("KLIENT"))
								    			.concat("\n");
									}
								    catch (SQLException e) {
										e.printStackTrace();
									}
							 }
						} 
						catch (SQLException e) {
							e.printStackTrace();
						}
						
						finally{
								try 
								{
									// close connection
									rs.close();
									pstmt.close();
									//conn.close();
									Process(false);
								} 
	    	            			catch (SQLException e) {
	    	            				e.printStackTrace();
	    	            				Process(false);
	    	            				}
								NewChFrame printP = new NewChFrame (PaymentsPanel.this, str1);
								printP.setVisible(true);
						}
					}
       			}  		
        		
       		//*******************************************************************************
        		//Для кнопки Удалить запись
        		//*******************************************************************************
        		if (action.equals("Удалить запись")) 
        		{
        			if (input_d.getBackground().equals(Color.white) && input_s.getBackground().equals(Color.white)
        					&& input_n.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)
        					&& choice_k.getBackground().equals(Color.white))
        			{ 
        			
        				ynd = new YesNoDialog(PaymentsPanel.this, "Удалить запись?");
	   					ynd.setVisible(true);
	   				
	   					if (ynd.getResult())
	   					{
	   						Process(true);
	   						
	   						//try{
	   						//	conn = DriverManager.getConnection(URL, "sa", "");
	   						//} 
	       					//	catch (SQLException e2) {e2.printStackTrace();}
	       				
	   					
	       				  PreparedStatement pstmt = null;
					
							try {
								pstmt = conn.prepareStatement(
										"DELETE FROM sample WHERE ID = ?", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
								
								pstmt.setString(1, label_id.getText()); 
		    					
							}
								catch (SQLException e1) {
									e1.printStackTrace();
								}
						
							
							try {
								pstmt.executeUpdate();
							} catch (SQLException e1) {
								e1.printStackTrace();
							}
					
							ResultSet rs = null;
					
							//System.out.println("*удалена запись*");
	   		
								
	   							try {
									pstmt = (PreparedStatement) conn.prepareStatement(
											"SELECT * FROM sample", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
											    					
								}
									catch (SQLException e1) {
										e1.printStackTrace();
									}
	   							
	   							
	   						//выберем все записи
	   						try {
	   							rs = pstmt.executeQuery();
	   						}
	   							catch (SQLException e) {e.printStackTrace();}
	    	            
	   						//обновим поля формы
	   						try 
	   						{
	   							//если можно перейти на запись указанную в label_r
	   							if (rs.absolute(Integer.parseInt(label_r.getText())))
	   							{
	   								label_r.setText(Integer.toString(rs.getRow()));
													
	   								int id = rs.getInt("ID");
	   								label_id.setText(Integer.toString(id));
								
	   								choice_m.select(rs.getString("MANAGER"));
	   								input_d.setText(rs.getString("DAT"));
	   								choice_k.select(rs.getString("KLIENT"));
	   								input_n.setText(rs.getString("NN"));
	   								input_s.setText(rs.getBigDecimal("SUMA").toString());
	
	   								label_r.setText(Integer.toString(rs.getRow()));
	   								bname = "Обновить";
	   								bcolor = Color.RED;
			    	        	}
							
	   							//если нельзя то
	   							else
	   							{
	   								//если это последняя запись и label_r>0
	   								if (rs.last() && (Integer.parseInt(label_r.getText()) > 0))
	   								{
	   									//перейдем на предыдущую запись
	   									try 
	   									{
											//обновим поля формы
											rs.absolute(Integer.parseInt(label_r.getText()) - 1);
									
											int id = rs.getInt("ID");
											label_id.setText(Integer.toString(id));
										
											choice_m.select(rs.getString("MANAGER"));
											input_d.setText(rs.getString("DAT"));
											choice_k.select(rs.getString("KLIENT"));
											input_n.setText(rs.getString("NN"));
									 		input_s.setText(rs.getBigDecimal("SUMA").toString());
										
											label_r.setText(Integer.toString(rs.getRow()));
											bname = "Обновить";
											bcolor = Color.RED;
											//System.out.println("**");
										}
	   											catch (SQLException e) {e.printStackTrace();}
			    	            	}
								
	   								//если нет
	   								else
	   								{	//если последняя запись в базе	
	   									if ((Integer.parseInt(label_r.getText()) == 1)) 
	   									{
	   										input_n.setText("");
	   										input_s.setText("");
			        				
	   										label_r.setText("0");
	   										label_id.setText("0");
			        				
	   										bname = "Записать";
	   										bcolor = Color.LIGHT_GRAY;
	   										//System.out.println("*нет записей*");
	   										
	   										CheckFields();
	   									}
	   								}
	   							}
							} 
	   							catch (SQLException e) {e.printStackTrace();}
							
	   						finally
	   						{
	   							try 
	   							{
	   								// close connection
	   								rs.close();
	   								pstmt.close();
	   								//conn.close();
	   								Process(false);
	   							} 
	   								catch (SQLException e) {
	   									e.printStackTrace();
	   									Process(false);
   									}
	   							
	   							//обновим TOTAL
		   						RefreshTotal();
		   						Process(false);
	   						}
						}
        			}
   				}	
        			
        		
       		//*******************************************************************************
       			//Для кнопки Пересоздать Базу
        		//*******************************************************************************
       			if (action.equals("Пересоздать базу"))
       			{
       				ynd = new YesNoDialog(PaymentsPanel.this, "Пересоздать Базу?");
       				ynd.setVisible(true);
       				
       				if (ynd.getResult())
       				{
       					try{
       						Process(true);
       						ReCreateBase();
       						ClrForNewRecord();
       						RefreshTotal();
       						CheckFields();
       					   					
       						ynd = new YesNoDialog(PaymentsPanel.this,"База создана заново!", Color.LIGHT_GRAY);
       						ynd.setVisible(true);
       					}
       					finally{
       						bname = "Записать";
       						bcolor = Color.LIGHT_GRAY;
       						Process(false);
       					}
       				}    
       			} 
       			
       			
       		//*******************************************************************************
       			//Помощь
        		//*******************************************************************************
       			if (action.equals("Помощь"))
       			{
       				ynd = new YesNoDialog(PaymentsPanel.this,"Еще нет.", Color.LIGHT_GRAY);
					ynd.setVisible(true);
       			} 
       			
       		//*******************************************************************************
       			//About
        		//*******************************************************************************
       			if (action.equals("About"))
       			{
       				
       				ynd = new YesNoDialog(PaymentsPanel.this,
       						"ООО ДДС"
       						.concat(System.getProperty("line.separator"))
       						.concat("Реестр Платежей v2.")
       						.concat(System.getProperty("line.separator"))
       						.concat("1.Переделана выгрузка и загрузка файлов")
       						.concat(System.getProperty("line.separator"))
       						.concat("теперь обмен через .csv файл")
       						.concat(System.getProperty("line.separator"))
       						.concat("2.Исправлены ошибки и др. улучшения")
       						, Color.LIGHT_GRAY
       						);
					ynd.setVisible(true);
       			} 	
       			
       			
       		}
		}; 
        
        
        //*******************************************************************************
		//Обработка нажатий кнопок
		//*******************************************************************************
        ActionListener buttonListener = new ActionListener() 
        {
        	public void actionPerformed(ActionEvent ae) 
        	{
        		String action = ae.getActionCommand();
        		
        		//*******************************************************************************
        		//Для кнопки Записать
        		//*******************************************************************************
        		if (action.equals("Записать")) 
        		{
        			CheckFields();
        			
        			if (input_d.getBackground().equals(Color.white) && input_s.getBackground().equals(Color.white)
        					&& input_n.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)
        					&& choice_k.getBackground().equals(Color.white)) 
        			{
        				Process(true); 
        				
        				//Connection conn = null;
           				//try {conn = DriverManager.getConnection(URL, "sa", "");}
        				//	catch (SQLException e1) {e1.printStackTrace();}
        				        				
        				// insert new record by using a named parameter
        	            //try {conn.setAutoCommit(false);}
        	            //	catch (SQLException e1) {e1.printStackTrace();}
						
        	            PreparedStatement pstmt = null;
						try 
						{
							pstmt = conn.prepareStatement
									(
							            "INSERT INTO sample(MANAGER, KLIENT, NN, DAT, SUMA) VALUES(?, ?, ?, ?, ?)"
									);
							
							pstmt.setString(1, choice_m.getSelectedItem()); 
							pstmt.setString(2, choice_k.getSelectedItem());
							pstmt.setString(3, input_n.getText());
							pstmt.setString(4, input_d.getText());
							pstmt.setBigDecimal(5, BigDecimal.valueOf(Double.parseDouble(input_s.getText())));
							
						} 
						catch (SQLException e) {e.printStackTrace();}
        	            	
						try
						{   
        	                pstmt.executeUpdate();
						} 
							catch (SQLException e) {e.printStackTrace();}
        	                   	                
        	            finally
        	            {    
        	            	try 
        	            	{
        	            		pstmt.close();
								//conn.commit();
	        	            	//conn.close();
	        	            }
        	            		catch (SQLException e) {
        	            			e.printStackTrace();
        	            			Process(false);
        	            		}
        	            
        	            	//System.out.println("Строка записана");
	        				
            				//на последнюю запись
                			LastRecord();
                			Process(false);
            				ClrForNewRecord();
            				CheckFields();
        	            }
        	        } 
        			
        			//else{System.out.println("Проверьте введенные данные");}
        		}
        		
        		//*******************************************************************************
        		//Для кнопки Обновить
        		//*******************************************************************************
        		if (action.equals("Обновить")) 
        		{      	
        			CheckFields();
        			
        			if (input_d.getBackground().equals(Color.white) && input_s.getBackground().equals(Color.white)
        					&& input_n.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white)
        					&& choice_k.getBackground().equals(Color.white)) 
        			{
        				ynd = new YesNoDialog(PaymentsPanel.this, "Обновить запись?");
           				ynd.setVisible(true);
           				
           				if (ynd.getResult())
           				{
	        				Process(true);
	        				
	        				//Connection conn = null;
	        				//try {conn = DriverManager.getConnection(URL, "sa", "");}
	        				//	catch (SQLException e1) {e1.printStackTrace();}
	        				        				
	        				// insert new record by using a named parameter
	        	            //try {conn.setAutoCommit(false);}
	        	            //	catch (SQLException e1) {e1.printStackTrace();}
							
	        	            PreparedStatement pstmt = null;
							try 
							{
								pstmt =  conn.prepareStatement
									(
										"UPDATE sample SET MANAGER = ?, KLIENT = ?, NN = ?, DAT = ?, SUMA = ? WHERE ID = ?"
									);
										
								pstmt.setString(1, choice_m.getSelectedItem()); 
								pstmt.setString(2, choice_k.getSelectedItem());
								pstmt.setString(3, input_n.getText());
								pstmt.setString(4, input_d.getText());
								pstmt.setBigDecimal(5, BigDecimal.valueOf(Double.parseDouble(input_s.getText())));
								pstmt.setString(6, label_id.getText());
																										
							} 
								catch (SQLException e) {e.printStackTrace();}
	        	            	
							try
							{
	        	                pstmt.executeUpdate();
							} 
								catch (SQLException e) {e.printStackTrace();}
	        	                   	                
	        	            finally
	        	            {    
	        	            	try 
	        	            	{
	        	            		pstmt.close();
									//conn.commit();
		        	            	//conn.close();
								}
	        	            		catch (SQLException e) {
	        	            			e.printStackTrace();
	        	            			Process(false);	
	        	            		}
	        	            	
	        	            	//System.out.println("Строка обновлена и записана");
	            				RefreshTotal();
	            				Process(false);
	        	            }
           				}
        			} 
        			
        			//else{System.out.println("Проверьте введенные данные");}
        		}
        		
        		//*******************************************************************************
        		//Для кнопки =
        		//*******************************************************************************
        		if (action.equals("="))
       			{
        			//dateNow = new Date();
        			//nowDDMMYYYY = new StringBuilder(dateformatDDMMYYYY.format(dateNow));
        			input_d.setText(nowDDMMYYYY.toString());
       			} 
        		
        		//*******************************************************************************
        		//Для кнопки /\
        		//*******************************************************************************
        		if (action.equals("/\\"))
       			{
        			String d=input_d.getText();
        			
        			Date dat = null;
        			try {
        				dat = dateformatDDMMYYYY.parse(d) ;
					}
        				catch (ParseException e) {e.printStackTrace();}
        		
        			dat.setTime(dat.getTime() + 1000 * 60 *60 * 24);
        			input_d.setText(new StringBuilder(dateformatDDMMYYYY.format(dat)).toString());
        		} 
        
        		//*******************************************************************************
        		//Для кнопки \/
        		//*******************************************************************************
        		if (action.equals("\\/"))
       			{
        			String d=input_d.getText();
        			
        			Date dat = null;
        			try {
        				dat = dateformatDDMMYYYY.parse(d) ;
					}
        				catch (ParseException e) {e.printStackTrace();}
        		
        			dat.setTime(dat.getTime() - 1000 * 60 *60 * 24);
        			input_d.setText(new StringBuilder(dateformatDDMMYYYY.format(dat)).toString());
        		} 
        		
        		//*******************************************************************************
        		//Для кнопки <<
        		//*******************************************************************************
        		if (action.equals("<<"))
       			{
        			Process(true);
        			try{
        				FirstRecord();
        				CheckFields();
        			}
        			finally{
        				if (Integer.parseInt(label_r.getText()) != 0){
        					bcolor = Color.RED;
        				}
        				Process(false);
        			}
       			} 
        		//*******************************************************************************
        		//Для кнопки >>
        		//*******************************************************************************
        		if (action.equals(">>"))
       			{
        			Process(true);
       				try {
       					LastRecord();
       					CheckFields();
       				}
       				finally{
       					if (Integer.parseInt(label_r.getText()) != 0){
       						bcolor = Color.RED;
        				}
       					Process(false);
       					
       				}
       			}
        		//*******************************************************************************
        		//Для кнопки <
        		//*******************************************************************************
        		if (action.equals("<"))
       			{
        			Process(true);
        			try{
        				PreviousRecord();
        				CheckFields();
        			}
        			finally{
        				if (Integer.parseInt(label_r.getText()) != 0){
        					bcolor = Color.RED;
        				}
        				Process(false);
        			}
       			} 
        		//*******************************************************************************
        		//Для кнопки >
        		//*******************************************************************************
        		if (action.equals(">"))
       			{
        			Process(true);
        			try{
        				NextRecord();
        				CheckFields();
       				}
        			finally{
        				if (Integer.parseInt(label_r.getText()) != 0){
        					bcolor = Color.RED;
        				}
        				Process(false);
        			}
       			}	
        		//*******************************************************************************
        		//Для кнопки *
        		//*******************************************************************************
        		if (action.equals("*"))
       				{
        				button_w.setBackground(Color.LIGHT_GRAY);
        				ClrForNewRecord();
        				CheckFields();
					} 
        		//*******************************************************************************
        		//Для кнопки ~
        		//*******************************************************************************
        		if (action.equals("~"))
       				{
        				Process(true);
        				try{
        					RefreshTotal();
        				}
        				finally{
        					Process(false);
        				}
					} 
				}  
			};
    

//**************************************************************************************************************       	
//**************************************************************************************************************		
//**************************************************************************************************************
		//*******************************************************************************
       	//Заполним Форму
		//*******************************************************************************
       	
       	// Панель Panel1
       	MenuBar mb1 = new MenuBar();
        setMenuBar(mb1);
        MenuItem mi;
        
        Menu fm, sm, bdm, hlpm;			/** File, Options, Help */
      	//Menu spSubm;					/** Options Sub-Menu */
      	//MenuItem exitItem;			/** The MenuItem for exiting. */
      	//CheckboxMenuItem cb, cb1;	/** An option that can be on or off. */
        
        //Файл Menu...
        fm = new Menu("Файл");
        
        	fm.add(mi = new MenuItem("Загрузить Клиентов"));
        	mi.addActionListener(MenuListener);
        	
        	fm.add(mi = new MenuItem("Выгрузить РП +ftp"));
        	mi.addActionListener(MenuListener);
        	fm.addSeparator();
        	
        	fm.add(mi = new MenuItem("Выход"));
        	//exitItem = mi; 						// save for action handler
        	mi.addActionListener(MenuListener);
        
        mb1.add(fm);

        //Сервис Menu...
        sm = new Menu("Сервис");
      	
        	//sm.add(mi = new MenuItem("Добавить клиента"));
        	//mi.addActionListener(MenuListener);
        
        	sm.add(mi = new MenuItem("Список платежей"));
        	mi.addActionListener(MenuListener);
        	sm.addSeparator();
        	        	        	
        	sm.add(mi = new MenuItem("Удалить запись"));
        	mi.addActionListener(MenuListener);
        	       	
        		//spSubm = new Menu("ТП по умолчанию");
        		//cb = new CheckboxMenuItem("Текущий менеджер");
        		//cb.addActionListener(MenuListener);
        		//spSubm.add(cb);
            	
            //sm.add(spSubm);
        	
        mb1.add(sm);
      	 
      	//БД Menu...
        bdm = new Menu("База");
      	
        	bdm.add(mi = new MenuItem("Пересоздать базу"));
        	mi.addActionListener(MenuListener);
        
        	//bdm.add(mi = new MenuItem("Проверить ошибки"));
        	//mi.addActionListener(MenuListener);
      	
        mb1.add(bdm);
      	
      //Help Menu...
        hlpm = new Menu("?");
      	
        	hlpm.add(mi = new MenuItem("Помощь"));
        	mi.addActionListener(MenuListener);
        
        	hlpm.add(mi = new MenuItem("About"));
        	mi.addActionListener(MenuListener);
      	
        mb1.add(hlpm);
        
        //**********************************************************************************
        //**********************************************************************************
        //Элементы формы
        Panel Panel1 = new Panel();
       
        java.awt.Label label_m, label_d, label_k, label_n, label_s;
        
       	GridBagLayout gbl = new GridBagLayout();
        Panel1.setLayout(gbl);
       
        GridBagConstraints c = new GridBagConstraints();
        
        c.anchor = GridBagConstraints.NORTHWEST; 
        c.fill   = GridBagConstraints.NONE;
                 
        c.ipadx = 1;
        c.ipady = 1;
        c.insets = new Insets(0, 0, 0, 1);
       	 
        c.weighty = 1.0;
        c.weightx = 0.0;
        		
        c.gridwidth  = 5;							//Количество ячеек в строке
        c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;								//Номер ячейки в строке
        c.gridy = 0;								//Номер ячейки в столбце
       	
        //Комбо с выбором менеджера
       	label_m = new java.awt.Label("Менеджер:");
        gbl.setConstraints(label_m, c);   
       		Panel1.add(label_m);
       	 
       	c.fill   = GridBagConstraints.HORIZONTAL;
       	c.weightx = 1.0;
       	c.gridwidth  = GridBagConstraints.REMAINDER ;	//занять остаток строки
       	//c.gridheight = 1;							   	//Количество ячеек в колонке
       	c.gridx = 5;									//Номер ячейки в строке
        //c.gridy = 0;									//Номер ячейки в столбце
       	
       	choice_m = new Choice();
       	gbl.setConstraints(choice_m, c);
       		Panel1.add(choice_m);
      
       	//Для ввода даты	
       	c.fill   = GridBagConstraints.NONE;
       	c.insets = new Insets(0, 0, 1, 1);
       	c.weightx = 0.0;
       	c.gridwidth  = 2;							//Количество ячеек в строке
        //c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;
        c.gridy = 1;
       		
       		label_d = new java.awt.Label("Дата:");
       		gbl.setConstraints(label_d, c); 
           		Panel1.add(label_d);
   		   	 
           	c.anchor = GridBagConstraints.NORTHEAST; 
           	//c.fill   = GridBagConstraints.NONE;
           	c.gridwidth  = 1;							//Количество ячеек в строке
            //c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 2;
            //c.gridy = 1;
                  
           		updat = new Button("/\\");
           			gbl.setConstraints(updat, c); 
           			updat.addActionListener(buttonListener);
           			Panel1.add(updat);
           		
           		 c.anchor = GridBagConstraints.NORTHWEST; 
           		 //c.gridwidth  = 1;							//Количество ячеек в строке
                 //c.gridheight = 1;						   	//Количество ячеек в колонке
                 c.gridx = 3;
                // c.gridy = 1;
                               	
           		downdat = new Button("\\/");
           			gbl.setConstraints(downdat, c); 
           			downdat.addActionListener(buttonListener);
           			Panel1.add(downdat);
           			
           		 c.anchor = GridBagConstraints.CENTER; 
           		 //c.gridwidth  = 1;							//Количество ячеек в строке
                 //c.gridheight = 1;						   	//Количество ячеек в колонке
                 c.gridx = 4;
                 //c.gridy = 1;
           			
        		nowdat = new Button("=");
        			gbl.setConstraints(nowdat, c); 
           			nowdat.addActionListener(buttonListener);
           			Panel1.add(nowdat);
        
        c.anchor = GridBagConstraints.NORTHWEST; 
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
        c.gridwidth  = GridBagConstraints.REMAINDER ;//занять остаток строки           			
        //c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 5;
        //c.gridy = 1;
        
        input_d = new TextField();
        gbl.setConstraints(input_d, c); 
        	input_d.addTextListener(TextL);
        	input_d.addFocusListener(FocusL);
        	Panel1.add(input_d);
  
        c.fill   = GridBagConstraints.NONE;	
        c.insets = new Insets(0, 0, 0, 1);
        c.weightx = 0.0;
        c.gridwidth  = 2;							//Количество ячеек в строке
        //c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;
        c.gridy = 2;								//Номер ячейки в столбце
        //комбо выбора клиента
        label_k = new java.awt.Label("Клиент:");
        gbl.setConstraints(label_k, c); 
        	Panel1.add(label_k);
        
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.gridwidth  = GridBagConstraints.REMAINDER;
        c.weightx = 1.0;
        //c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 2;
        //c.gridy = 2;								//Номер ячейки в столбце
        	
        choice_k = new Choice();
        gbl.setConstraints(choice_k, c); 
          	//choice_k.setFont(TR10pt);
            choice_k.addFocusListener(FocusL);
        	Panel1.add(choice_k);
         
        //поле для ввода номера НН
        c.fill   = GridBagConstraints.NONE;	
        c.insets = new Insets(0, 0, 1, 1);
        c.weightx = 0.0;
    	c.gridwidth  = 5;							//Количество ячеек в строке
        //c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;
        c.gridy = 3;								//Номер ячейки в столбце
        label_n = new java.awt.Label("Ном.НН:");
        gbl.setConstraints(label_n, c); 
        	Panel1.add(label_n);
        
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
        c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
        //c.gridheight = 1;						   		//Количество ячеек в колонке
        c.gridx = 5;
        c.gridy = 3;								//Номер ячейки в столбце
        input_n = new TextField();
        gbl.setConstraints(input_n, c); 
        	input_n.addTextListener(TextL);
        	input_n.addFocusListener(FocusL);
        	Panel1.add(input_n);
        	//input_n.setBackground(Color.red);
        
        //поле для ввода суммы
        c.fill   = GridBagConstraints.NONE;	
        c.weightx = 0.0;
    	c.gridwidth  = 5;							//Количество ячеек в строке
        //c.gridheight = 1;						   	//Количество ячеек в колонке
        c.gridx = 0;
        c.gridy = 4;								//Номер ячейки в столбце
        label_s = new java.awt.Label("Сумма:");
        gbl.setConstraints(label_s, c); 
        	Panel1.add(label_s);
        
        c.fill   = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
    	c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
        //c.gridheight = 1;						   		//Количество ячеек в колонке
        c.gridx = 5;
        //c.gridy = 4;								//Номер ячейки в столбце
        input_s = new TextField();
        gbl.setConstraints(input_s, c); 
        	input_s.addTextListener(TextL);
        	input_s.addFocusListener(FocusL);
        	Panel1.add(input_s);
        	//input_s.setBackground(Color.red);
        	
        //*******************************************************************************
       	//Итоговая сумма
		//*******************************************************************************
       
        //Для обновления total
        	c.fill   = GridBagConstraints.NONE;	
        	c.weightx = 0.0;
        	c.gridwidth  = 4;							//Количество ячеек в строке
            //c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 5;								//Номер ячейки в столбце
        	
       		java.awt.Label label_total = new java.awt.Label("Итог ТП+Дата:");
       		gbl.setConstraints(label_total, c); 
       			Panel1.add(label_total);
       		
       			c.anchor = GridBagConstraints.CENTER; 
       			c.fill   = GridBagConstraints.HORIZONTAL;
       			c.gridwidth  = 1;							//Количество ячеек в строке
                //c.gridheight = 1;						   		//Количество ячеек в колонке
                c.gridx = 4;
                //c.gridy = 5;								//Номер ячейки в столбце
                
       		totalrfr = new Button("~");
       		gbl.setConstraints(totalrfr, c); 
       			totalrfr.addActionListener(buttonListener);
       			Panel1.add(totalrfr);
       	
       		c.anchor = GridBagConstraints.NORTHWEST;
       		//c.fill   = GridBagConstraints.HORIZONTAL;
       		c.weightx = 1.0;
       		c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
            //c.gridheight = 1;						   		//Количество ячеек в колонке
            c.gridx = 5;
            //c.gridy = 5;								//Номер ячейки в столбце
       
            label_t = new java.awt.Label("0.0");
            gbl.setConstraints(label_t, c); 
        	label_t.setBackground(Color.ORANGE);
        	Panel1.add(label_t);
        
        	c.fill   = GridBagConstraints.NONE;	
        	c.weightx = 0.0;
        	c.gridwidth  = 5;							//Количество ячеек в строке
            //c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 6;								//Номер ячейки в столбце
        
        java.awt.Label label_row = new java.awt.Label("Запись ном.:");
        gbl.setConstraints(label_row, c); 
        	Panel1.add(label_row);
        
        	c.fill   = GridBagConstraints.HORIZONTAL;
        	c.gridwidth  = GridBagConstraints.REMAINDER;							//Количество ячеек в строке
        	c.weightx = 1.0;
            //c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 5;
            //c.gridy = 6;								//Номер ячейки в столбце
        label_r = new java.awt.Label("0");
        gbl.setConstraints(label_r, c); 
        	Panel1.add(label_r);
        	
        	c.fill   = GridBagConstraints.NONE;	
        	c.weightx = 0.0;
        	c.gridwidth  = 5;							//Количество ячеек в строке
            //c.gridheight = 1;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 7;								//Номер ячейки в столбце
        java.awt.Label label_rowid = new java.awt.Label("ID:");
        gbl.setConstraints(label_rowid, c); 
        	Panel1.add(label_rowid);
        
        	c.fill   = GridBagConstraints.HORIZONTAL;
        	c.weightx = 1.0;
        	c.gridwidth  = GridBagConstraints.REMAINDER;	//Количество ячеек в строке
            //c.gridheight = 1;						   		//Количество ячеек в колонке
            c.gridx = 5;
            //c.gridy = 7;								//Номер ячейки в столбце
        label_id = new java.awt.Label("");
        gbl.setConstraints(label_id, c);
        	Panel1.add(label_id);
        
       
        //*******************************************************************************
       	//Кнопки
		//*******************************************************************************
        	//c.anchor = GridBagConstraints.NORTHWEST; 
        	c.fill   = GridBagConstraints.NONE;
        	c.ipady = 5;
        	c.weightx = 0.0;
        	c.gridwidth  = 1;							//Количество ячеек в строке
            c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 0;
            c.gridy = 8;								//Номер ячейки в столбце
    		
        firstr = new Button("<<");
        gbl.setConstraints(firstr, c);
        	firstr.addActionListener(buttonListener);
        	firstr.setSize(100, 100);
        	Panel1.add(firstr);
        	
        	c.ipadx = 5;
        	//c.gridwidth  = 1;							//Количество ячеек в строке
            //c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 1;
            //c.gridy = 8;								//Номер ячейки в столбце
    		
        prevr = new Button("<");
        gbl.setConstraints(prevr, c);
        	prevr.addActionListener(buttonListener);
        	Panel1.add(prevr);
        	
        	c.anchor = GridBagConstraints.NORTHEAST; 
        	//c.ipadx = 5;
        	//c.gridwidth  = 1;							//Количество ячеек в строке
            //c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 2;
            //c.gridy = 8;								//Номер ячейки в столбце
        	
        nextr = new Button(">");
        gbl.setConstraints(nextr, c);
        	nextr.addActionListener(buttonListener);
        	Panel1.add(nextr);
        	
        	c.ipadx = 1;
        	//c.gridwidth  = 1;							//Количество ячеек в строке
            //c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 3;
            //c.gridy = 8;								//Номер ячейки в столбце
        	
        lastr = new Button(">>");
        gbl.setConstraints(lastr, c);
        	lastr.addActionListener(buttonListener);
        	Panel1.add(lastr);
       
        	c.anchor = GridBagConstraints.CENTER; 
        	c.ipadx = 5;
        	//c.gridwidth  = 1;							//Количество ячеек в строке
            //c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 4;
            //c.gridy = 8;								//Номер ячейки в столбце
        	
        newr = new Button("*");
        gbl.setConstraints(newr, c);
        	newr.addActionListener(buttonListener);
        	Panel1.add(newr);
      
        	c.anchor = GridBagConstraints.NORTHWEST; 
        	c.fill   = GridBagConstraints.HORIZONTAL;
        	c.ipadx = 1;
        	c.weightx = 1.0;
        	c.gridwidth  = GridBagConstraints.REMAINDER;
            //c.gridheight = GridBagConstraints.REMAINDER;						   	//Количество ячеек в колонке
            c.gridx = 5;
            //c.gridy = 8;								//Номер ячейки в столбце
                
        button_w = new Button("Записать");
        gbl.setConstraints(button_w, c);
        	button_w.addActionListener(buttonListener);
        	Panel1.add(button_w);
        	button_w.setBackground(Color.LIGHT_GRAY);
        	      
       add(Panel1, BorderLayout.NORTH);
        // this.pack();
 
	    //**************************************************************************
	    //**************************************************************************
	    //**************************************************************************
	    
        //Process(true);
        //загрузить список клиентов
        LoadKlients(false);
        
        //выбрать менеджера по умолчанию из prop
        //choice_m.select(MANAGER);
        
        //Установить курсор на первую строку
        // LastRecord();
        
        //записать завтрашнюю дату в поле
        input_d.setText(new StringBuilder(dateformatDDMMYYYY.format(new Date((dateNow.getTime() + 1000 * 60 *60 * 24)))).toString());
        nowdat.setBackground(Color.RED);
        
        //записать текущую дату в поле
        //input_d.setText(nowDDMMYYYY.toString());
        
        //Очистить поля
        ClrForNewRecord();
        
        //RefreshTotal();
        
        CheckFields();
        // Process(false);
        
        System.out.println("payments started successfully!");
        
  }

//**********************************************************************************************************************
//**********************************************************************************************************************
//ФУНКЦИИ
	
	//Для проверки корректности полей
	private static void CheckFields(){
		
		String d=input_d.getText();
		String n=input_n.getText();
		String s=input_s.getText();
		
		if (choice_m.getSelectedItem() == null || choice_m.getSelectedItem() == ""){
			choice_m.setBackground(Color.red);
		}	
		else {
			choice_m.setBackground(Color.white);
		}
		
		if (choice_k.getSelectedItem() == null || choice_k.getSelectedItem() == ""){
				choice_k.setBackground(Color.red);
		}	
		else {
			choice_k.setBackground(Color.white);
		}
					
		if (d.matches("^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20)\\d\\d$")){
				input_d.setBackground(Color.white);
		}	
		else {
			input_d.setBackground(Color.red);
		}
		
		if (n.matches(".+")){
			input_n.setBackground(Color.white);
		}	
		else {
			input_n.setBackground(Color.red);
		}
		
		if (s.matches("(\\d{1,10})$|(\\d{1,10}[.]?\\d{1,2})$")){
			input_s.setBackground(Color.white);
		}	
		else {
			input_s.setBackground(Color.red);
		}
	}
	
	//загрузить список клиентов
	private static void LoadKlients(boolean openf /**  выбрать файл в проводнике */){
		
		File fileCsv;
		// Диалог открытия файла
		if (openf){
			fileCsv  = new File(new UseFileDialog().loadFile(new Frame(), "Open...", DOWNLOAD_DIR, "*.csv")); // take xls file as program argument
		}
		else{
			fileCsv  = new File(DOWNLOAD_DIR, MANAGER2.concat(".csv")); // take xls file as argument	
		}
		
		if (!fileCsv.exists()){
			return;
		}
		
		CsvReader csvR = null;
		
		Set klients = new HashSet();
		Set managers = new HashSet();
		
		try 
		{
				choice_m.setVisible(false);							//скрыть, для более бытрого добавления в список
				choice_k.setVisible(false);

				try {
					csvR = new CsvReader(fileCsv.toString(), ';', Charset.forName("Windows-1251")); 
					
				}
					catch (IOException e) {e.printStackTrace();} 

				choice_m.removeAll();
				managers.clear();
				
				choice_k.removeAll();
				klients.clear();
				
				choice_m.addItem("");
				choice_k.addItem("");
				
				try {
					csvR.readHeaders();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
				
				try {
					csvR.readRecord(); //reading first row
					managers.add(csvR.get("manager").trim());
					klients.add(csvR.get("klient").trim());
				} catch (IOException e) {
					e.printStackTrace();
				}
								
				try {
					while (csvR.readRecord()) //reading from second row
					{
						klients.add(csvR.get("klient").trim());
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
		
				csvR.close();
		}
		finally	{
			try{
				//add klient and manager from base to managers() and klients()
				//Add2Choice(); 
				
				Statement stmt = null;
				try {stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);}
					catch (SQLException e) {e.printStackTrace();}
	            
				ResultSet rs = null;
				
				try 
				{
					rs = stmt.executeQuery("SELECT MANAGER FROM sample GROUP BY MANAGER");
				}
					catch (SQLException e) {e.printStackTrace();}
	            
				try {
					while (rs.next())
					{
						managers.add(rs.getString(1));
						//choice_m.addItem( rs.getString(1));
					 }

				}
					catch (SQLException e) {e.printStackTrace();}
	            
				try 
				{
					rs = stmt.executeQuery("SELECT KLIENT FROM sample GROUP BY KLIENT");
				}
					catch (SQLException e) {e.printStackTrace();}
				
				try {
					
					while (rs.next())
					{
						if (rs.getString(1) != null){
							klients.add(rs.getString(1));
						}
						//choice_k.addItem( rs.getString(1));
					 }
				}
					catch (SQLException e) {e.printStackTrace();}
				
				finally
	            {
					try 
	            	{
	            	   // close connection
						rs.close();
					    stmt.close();
					    //conn.close();
					   
					} 
	            		catch (SQLException e) {
	            			e.printStackTrace();
	            			
	            			}
	            }
												
				String managers2[] = new String[managers.size()];
				managers.toArray(managers2);
				Arrays.sort(managers2);
								
				int i;
				for	(i=0; i < managers2.length; i++)
				{
					choice_m.addItem(managers2[i]);
				}
				
				String klients2[] = new String[klients.size()];
				klients.toArray(klients2);
				Arrays.sort(klients2);
			
				for	(i=0; i < klients2.length; i++)
				{
					choice_k.addItem(klients2[i]);
				}
				
				managers2=null;
				klients2=null;
			}
			finally{
				managers.clear();
				klients.clear();
				
				choice_m.setVisible(true);
				choice_k.setVisible(true);
			}
		}
		
		choice_m.requestFocus();
		
		CheckFields();
		RefreshTotal();
		
	}
	
	
//****************************************************************************************************	
//****************************************************************************************************
	//функции для работы с базой

	//*******************************************************
	//Для перехода на следующую запись
	private static void NextRecord(){
		
		//conn = null;
		//try{conn = DriverManager.getConnection(URL, "sa", "");} 
		//	catch (SQLException e2) {e2.printStackTrace();}
		
		Statement stmt = null;
		try {stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;

		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			if (rs.absolute(Integer.parseInt(label_r.getText())))
			{
				if (!rs.isLast())
				{
				
					rs.absolute(Integer.parseInt(label_r.getText()) + 1);
			
					int id = rs.getInt("ID");
					label_id.setText(Integer.toString(id));
				
					choice_m.select(rs.getString("MANAGER"));
					input_d.setText(rs.getString("DAT"));
					choice_k.select(rs.getString("KLIENT"));
					input_n.setText(rs.getString("NN"));
					input_s.setText(rs.getBigDecimal("SUMA").toString());
					
					label_r.setText(Integer.toString(rs.getRow()));
					
					bname="Обновить";
					//System.out.println("*Выбрана следующая запись*");
					RefreshTotal();
				}
			}
		} 
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        	   // close connection
        		rs.close();
			    stmt.close();
			    //conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		
		//CheckFields(); 
		
	}
	
	
	//*******************************************************
	//Для перехода на предыдущую запись
	private static void PreviousRecord(){
			
		//conn = null;
		//try{conn = DriverManager.getConnection(URL, "sa", "");} 
		//	catch (SQLException e2) {e2.printStackTrace();}
			
        Statement stmt = null;
		try {stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;

		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			if (rs.absolute(Integer.parseInt(label_r.getText())))
			{
				if (!rs.isFirst())
				{
					rs.absolute(Integer.parseInt(label_r.getText()) - 1);
			
					int id = rs.getInt("ID");
					label_id.setText(Integer.toString(id));
				
					choice_m.select(rs.getString("MANAGER"));
					input_d.setText(rs.getString("DAT"));
					choice_k.select(rs.getString("KLIENT"));
					input_n.setText(rs.getString("NN"));
			 		input_s.setText(rs.getBigDecimal("SUMA").toString());
					
					label_r.setText(Integer.toString(rs.getRow()));
					
					bname="Обновить";
					//System.out.println("*Выбрана предыдущая запись*");
					RefreshTotal();
				}
			}
		} 
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        	    // close connection
        		rs.close();
			    stmt.close();
			    //conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		 
		//CheckFields();
	
	}
	
	
	//*******************************************************
	//Для перехода на первую запись
	private static void FirstRecord(){
		
		//conn = null;
		//try{conn = DriverManager.getConnection(URL, "sa", "");} 
		//	catch (SQLException e2) {e2.printStackTrace();}
		
        Statement stmt = null;
		try {stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;

		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			
			if(rs.first())
			{	
				int id = rs.getInt("ID");
				label_id.setText(Integer.toString(id));
			
				choice_m.select(rs.getString("MANAGER"));
				input_d.setText(rs.getString("DAT"));
				choice_k.select(rs.getString("KLIENT"));
				input_n.setText(rs.getString("NN"));
				input_s.setText(rs.getBigDecimal("SUMA").toString());
				
				label_r.setText(Integer.toString(rs.getRow()));
				
				bname="Обновить";
				//System.out.println("*Выбрана первая запись*");
				RefreshTotal();
			}
		
		} 
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        	   // close connection
        		rs.close();
			    stmt.close();
			    //conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		
		//CheckFields();	
		
	}
	
	//*******************************************************
	//Для перехода на последнюю запись
	private static void LastRecord(){
		
		//try{conn = DriverManager.getConnection(URL, "sa", "");} 
		//	catch (SQLException e2) {e2.printStackTrace();}
			    	            
        Statement stmt = null;
		try 
		{
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
		}
			catch (SQLException e) {e.printStackTrace();}
        
		ResultSet rs = null;
							
		try {rs = stmt.executeQuery("SELECT * FROM sample");}
			catch (SQLException e) {e.printStackTrace();}
        
		try 
		{
			
			if(rs.last())
			{
				int id = rs.getInt("ID");
				label_id.setText(Integer.toString(id));
				choice_m.select(rs.getString("MANAGER"));
				input_d.setText(rs.getString("DAT"));
				choice_k.select(rs.getString("KLIENT"));
				input_n.setText(rs.getString("NN"));
			 	input_s.setText(rs.getBigDecimal("SUMA").toString());
			
			 	label_r.setText(Integer.toString(rs.getRow()));
				
			 	bname="Обновить";
				//System.out.println("*Выбрана последняя запись*");
				RefreshTotal();
			}
		 
		}
			catch (SQLException e) {e.printStackTrace();}
        
		finally
        {
        	try 
        	{
        		// close connection
        		rs.close();
			    stmt.close();
			    //conn.close();
			} 
        		catch (SQLException e) {e.printStackTrace();}
        }
		
		//CheckFields();
	
	}
	
	//*******************************************************
	//Пересоздать Базу
	private static void ReCreateBase(){
		
		try {
			//conn = DriverManager.getConnection(URL, "sa", "");
		
				
			Statement stmt = conn.createStatement();
		    stmt.executeUpdate("DROP TABLE sample IF EXISTS");
		    stmt.executeUpdate("DROP TABLE klients IF EXISTS");
		    stmt.executeUpdate(
		    		"CREATE TABLE sample(ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY, MANAGER VARCHAR(50), KLIENT VARCHAR(50), NN VARCHAR(50), DAT VARCHAR(50), SUMA DECIMAL(10,2))"
		            );
		    stmt.executeUpdate(
		    		"CREATE TABLE klients(ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY, MANAGER VARCHAR(50), KLIENT VARCHAR(50))"
		    		);
		    stmt.close();
		    }
		        
			catch (SQLException e1) {e1.printStackTrace();} 	
		        
		        //finally
		        //{
		        //	try
		        //	{
		        		//conn.close();
		        		
		        //	} 
		        //  		catch (SQLException e) {
		        //  			e.printStackTrace();
		        //  			}
		        //}
 	}
	
	
	//*******************************************************
	//Для  очистки полей под новую запись
	private static void ClrForNewRecord(){
		input_n.setText("");
		input_s.setText("");
		
		button_w.setLabel("Записать");
        //System.out.println("Очистим поля для новой записи");
	}
	
	//private static void Add2Choice(){
			
		//Connection conn = null;
				
		//	try{
		//			conn = DriverManager.getConnection(URL, "sa", "");
		//		} 
		//			catch (SQLException e2) {e2.printStackTrace();}
			
				//System.out.println("*Выбрать все записи по ТП и по Дате*");
        
    //        Statement stmt = null;
	//		try {stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);}
	//			catch (SQLException e) {e.printStackTrace();}
            
	//		ResultSet rs = null;
			
	//		try 
	//		{
	//			rs = stmt.executeQuery("SELECT MANAGER FROM sample GROUP BY MANAGER");
	//		}
	//			catch (SQLException e) {e.printStackTrace();}
            
	//		try {
	//			while (rs.next())
	//			{
	//				managers.add(rs.getString(1));
					//choice_m.addItem( rs.getString(1));
	//			 }

	//		}
	//			catch (SQLException e) {e.printStackTrace();}
            
	//		try 
	//		{
	//			rs = stmt.executeQuery("SELECT KLIENT FROM sample GROUP BY KLIENT");
	//		}
	//			catch (SQLException e) {e.printStackTrace();}
			
	//		try {
				
	//			while (rs.next())
	//			{
	//				if (rs.getString(1) != null){
	//					klients.add(rs.getString(1));
	//				}
	//				//choice_k.addItem( rs.getString(1));
	//			 }
	//		}
	//			catch (SQLException e) {e.printStackTrace();}
			
	//		finally
    //        {
	//			try 
    //       	{
            	   // close connection
	//				rs.close();
	//			    stmt.close();
				    //conn.close();
				   
	//			} 
    //       		catch (SQLException e) {
    //        			e.printStackTrace();
            			
    //        			}
    //       }
	//} 
	//*******************************************************
	//Для  обновления TOTAL
	private static BigDecimal RefreshTotal(){
		
		BigDecimal summ = new BigDecimal(0).setScale(2);	
		
		if (input_d.getBackground().equals(Color.white) && choice_m.getBackground().equals(Color.white))
		{
		
			//conn = null;
			//try{conn = DriverManager.getConnection(URL, "sa", "");} 
			//	catch (SQLException e2) {e2.printStackTrace();}
			
			//	select all
			//System.out.println("*Обновить TOTAL*");
        	
			//try {conn.setAutoCommit(false);}
         	//catch (SQLException e1) {e1.printStackTrace();}
		
		PreparedStatement pstmt = null;
		
				try {
					pstmt = conn.prepareStatement(
							"SELECT DAT, MANAGER, sum(SUMA) AS TOTAL FROM sample where MANAGER = ? and DAT = ? GROUP BY DAT, MANAGER"
							);
					
					pstmt.setString(1, choice_m.getSelectedItem()); 
					pstmt.setString(2, input_d.getText());
					
					
				}
					catch (SQLException e1) {
						e1.printStackTrace();
					}
			
		
			ResultSet rs = null;
			try 
			{
				rs = pstmt.executeQuery();
			}
				catch (SQLException e) {e.printStackTrace();}
        
			summ = BigDecimal.ZERO;
			try 
			{
					rs.next();
					summ = rs.getBigDecimal("TOTAL");
			} 
				catch (SQLException e2) {}
		 					
			label_t.setText(summ.toString());
       
			try 
			{
				// close connection
				rs.close();
				pstmt.close();
				//conn.close();
			} 
       			catch (SQLException e) {e.printStackTrace();}
       	}
		return summ;
	}
	
	
	private static void Process(boolean t){
		
		if (t){
			bcolor = button_w.getBackground();
			button_w.setBackground(Color.ORANGE);
			
			bname = button_w.getLabel();
			button_w.setLabel("Идет обработка");
			
			nowdat.setEnabled(false);
			updat.setEnabled(false);
			downdat.setEnabled(false);
			
			totalrfr.setEnabled(false);
						
			button_w.setEnabled(false);
			firstr.setEnabled(false);
			nextr.setEnabled(false);
			prevr.setEnabled(false);
			lastr.setEnabled(false);
			newr.setEnabled(false);
			
			choice_m.setEnabled(false);
			input_d.setEnabled(false);
			choice_k.setEnabled(false);
			input_n.setEnabled(false);
			input_s.setEnabled(false);
			
			//fm.setEnabled(false);
			//sm.setEnabled(false);
			//bdm.setEnabled(false);
		}
		
		else{
			button_w.setBackground(bcolor);
	   		button_w.setLabel(bname);
	   		
	   		choice_m.setEnabled(true);
			input_d.setEnabled(true);
			choice_k.setEnabled(true);
			input_n.setEnabled(true);
			input_s.setEnabled(true);
	   		
			nowdat.setEnabled(true);
			updat.setEnabled(true);
			downdat.setEnabled(true);
			
			totalrfr.setEnabled(true);			
			
	   		button_w.setEnabled(true);
	   		firstr.setEnabled(true);
			nextr.setEnabled(true);
			prevr.setEnabled(true);
			lastr.setEnabled(true);
			newr.setEnabled(true);
	   		
			//fm.setEnabled(true);
			//sm.setEnabled(true);
			//bdm.setEnabled(true);
		}
	}
	

	

	public void actionPerformed(ActionEvent e) {}


	public void textValueChanged(TextEvent arg0){}

	
	public void itemStateChanged(ItemEvent arg0) {}
 }
	